/**
 * @Author Stark
 * @Date 2022/2/12 18:30
 */
public class Day6 {
    //1、如何判断一个数是否是2的k次方？这里不需要确定k的值。例如：1是2的0次方，2是2的1次方，4是2的平方，求
    //N是不是2的K次方？
    public static boolean isPower(int n){
        int num = 1;
        while(n > num){
            num *= 2;
        }
        if(n == num){
            return true;
        }else{
            return false;
        }
    }
    //优化解法
    public static boolean isPower2(int n) {
        return (n & (n - 1)) == 0;
    }

    //2、一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
    public static int[] findNumberAppearOnce(int[] arr) {
        int xor = 0;
        for (int i = 0; i < arr.length; i++) {
            xor ^= arr[i];
        }
        int x = 1;
        while((x & xor) == 0){
            x <<= 1;
        }
        int[] arr1 = new int[arr.length];
        int[] arr0 = new int[arr.length];
        int x1,x0;
        x1 = x0 = 0;
        for (int i = 0; i < arr.length; i++) {
            if((x & arr[i]) != 0){
                arr1[x1++] = arr[i];
            }else{
                arr0[x0++] = arr[i];
            }
        }
        int xor1,xor0;
        xor1 = xor0 = 0;
        for (int i = 0; i < arr.length; i++) {
            xor1 ^= arr1[i];
            xor0 ^= arr0[i];
        }
        return new int[]{xor1,xor0};
    }

    public static void main(String[] args) {
//        System.out.println(isPower(256));

        int[] arr = findNumberAppearOnce(new int[]{2,4,7,9,1,9,7,4,1,0});
        System.out.println(arr[0] + "+" + arr[1]);
    }
}
